//
// Created by 罗俊华 on 2022/1/12.
//

#include <iostream>

void readLine();

void string_operation();

void input_to_string();

int main2() {
    using namespace std;

    cout << "测试字符串拼接" "我是第二段字符串";


    char str[20] = "字符串乌拉";

    cout << str << "\t的数组长度是：" << sizeof str << "\t字符的数量是" << strlen(str) << endl;

//    readLine();
//    string_operation();
    input_to_string();
    return 0;
}


void readLine() {

    const int max_name_size = 20;
    char name[max_name_size];


    char words[max_name_size];

//    读取一行字符串，get() getLine() 可以进行链式调用，因为调用之后其会返回一个 cin 对象
//    std::cin.get(name,max_name_size);
    std::cin >> name;

//    get(char[],int) 或 cin >> char[] 调用之后，换行符遗留在输入队列中，第二次调用get()时，看到的第一个字符就是换行符
//    使用不带参数的 get() 可以读取下一个字符
//    在继续读取下一行内容之前，先读取，并丢弃换行符
    char enter = std::cin.get();

    std::cin.get(words, max_name_size);

    std::cout << name << "说：" << words << std::endl;

    std::cout << "两次输入之间读取到的字符是" << enter << "其码值是：" << static_cast<int>(enter) << std::endl;

}

/**
 * 字符串操作
 */
void string_operation() {

    using namespace std;

    char target[20];

    char source[] = "你好";

    strcpy(target, source);

    cout << "复制之后的的target = " << target << endl;

    char another[] = "，罗俊华";

//     strcat() 会修改 source，并返回 source 的指针
//      strcat() 试图将 another 的全部字符 连接到数组 source，
//      如果超出 source 的长度，将覆盖相邻的内存
    char *contact = strcat(source, another);

    cout << "字符串连接之后：" << contact << endl;

    cout << source << "char[]的字符长度是：" << strlen(source) << endl;

    string hello = "你好";
    cout << hello << "string的字符长度是：" << hello.size() << endl;
}


void input_to_string() {

    using namespace std;

    cout << "请输入多个单词\n";

    string inputStr;

    string singleStr;

//    istream 中没有cin.get(string) 的一个类方法
//    cin.get(singleStr); // 无法编译

//  但是这样只能读取一个单词
    cin >> singleStr;

    cout << "刚刚读取到的一个单词是：" << singleStr << endl;

//  读取多个单词（一行）到 string 中
    getline(cin, inputStr);


    cout << "成功读取到多个单词到string中了" << endl;

    cout << inputStr << endl;

}

